//>>built
define("dojox/treemap/Keyboard", ["dojo/_base/array", "dojo/_base/lang", "dojo/_base/event", "dojo/_base/declare", "dojo/on", "dojo/keys", "dojo/dom-attr", "./_utils", "dijit/_FocusMixin"], function (_1, _2, _3, _4, on, _5, _6, _7, _8) {
    return _4("dojox.treemap.Keyboard", _8, {tabIndex:"0", _setTabIndexAttr:"domNode", constructor:function () {
    }, postCreate:function () {
        this.inherited(arguments);
        this._keyDownHandle = on(this.domNode, "keydown", _2.hitch(this, this._onKeyDown));
        this._mouseDownHandle = on(this.domNode, "mousedown", _2.hitch(this, this._onMouseDown));
    }, destroy:function () {
        this.inherited(arguments);
        this._keyDownHandle.remove();
        this._mouseDownHandle.remove();
    }, createRenderer:function (_9, _a, _b) {
        var _c = this.inherited(arguments);
        _6.set(_c, "tabindex", "-1");
        return _c;
    }, _onMouseDown:function (e) {
        this.domNode.focus();
    }, _onKeyDown:function (e) {
        var _d = this.get("selectedItem");
        if (!_d) {
            return;
        }
        var _e = this.itemToRenderer[this.getIdentity(_d)];
        var _f = _e.parentItem;
        var _10, _11, _12;
        if (e.keyCode != _5.UP_ARROW && e.keyCode != _5.NUMPAD_MINUS && e.keyCode != _5.NUMPAD_PLUS) {
            _10 = (e.keyCode == _5.DOWN_ARROW) ? _d.children : _f.children;
            if (_10) {
                _11 = _7.initElements(_10, _2.hitch(this, this._computeAreaForItem)).elements;
                _12 = _11[_1.indexOf(_10, _d)];
                _11.sort(function (a, b) {
                    return b.size - a.size;
                });
            } else {
                return;
            }
        }
        var _13;
        switch (e.keyCode) {
            case _5.LEFT_ARROW:
                _13 = _10[_11[Math.max(0, _1.indexOf(_11, _12) - 1)].index];
                break;
            case _5.RIGHT_ARROW:
                _13 = _10[_11[Math.min(_11.length - 1, _1.indexOf(_11, _12) + 1)].index];
                break;
            case _5.DOWN_ARROW:
                _13 = _10[_11[0].index];
                break;
            case _5.UP_ARROW:
                _13 = _f;
                break;
            case _5.NUMPAD_PLUS:
                if (!this._isLeaf(_d) && this.drillDown) {
                    this.drillDown(_e);
                    _3.stop(e);
                }
                break;
            case _5.NUMPAD_MINUS:
                if (!this._isLeaf(_d) && this.drillUp) {
                    this.drillUp(_e);
                    _3.stop(e);
                }
                break;
        }
        if (_13) {
            if (!this._isRoot(_13)) {
                this.set("selectedItem", _13);
                _3.stop(e);
            }
        }
    }});
});
